At 16:02 +0200 on 28/9/98, Tom Lane wrote:
>
> I believe sub-selects are currently only supported in WHERE clauses.
> Supporting them elsewhere is on the TODO list for a future release
> (no, 6.4 won't have it). In the meantime you'll have to read back
> the result of the sub-select and include it in the text of the INSERT.
>
> (I'm not sure whether the SQL spec allows a select in an INSERT like this
> anyway. What happens if the sub-select returns no tuples, or more than
> one tuple?)
First, there is an exception which is supposed to be thrown in such a case.
But anyway, there is no reason to do things like this. Read the "insert"
manpage. The syntax is:
insert into classname
[(att.expr-1 [,att_expr.i] )]
{values (expression1 [,expression-i] ) |
select expression1 [,expression-i]
[from from-list] [where qual]
So, you should format your insert like this:
INSERT INTO my_table
(int_field, text_field, another_int_field, another_text_field )
SELECT 15, 'The Wind in the Willows', foreign_int_field, foreign_text_field
FROM foreign_table
WHERE ...
Everything which you want inserted literally, you put as constants on the
select list. It's a valid expression. Anything you want from the other
table (or tables!), you mention by its field name.
Very simple, and has been working for ages.
Herouth
--
Herouth Maoz, Internet developer.
Open University of Israel - Telem project
http://telem.openu.ac.il/~herutma